/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.agi.ia.kohonen.unidimensao;

/**
 *
 * @author Renato
 */
public class Neuron {
    double[] peso;
    private double [] distancia;
    private double[] entrada;
    private int tamanho;
    double euclidiana;
    private double fatorAtualizacao;

    
    Neuron(int tamanho){
        this.peso=new double[tamanho];
        this.distancia=new double[tamanho];
        this.tamanho=tamanho;
    }
    
    void setEntrada(double[] entrada){
        this.entrada=entrada;
    }
    
    void calcularEntrada(){
        double d;
        euclidiana=0;
        for(int i=0;i<tamanho;i++){
            d=entrada[i]-peso[i];
            distancia[i]=d;
            euclidiana+=(d*d);
        }
    }
    
    void atualizar(double fator){
        double f;
        f=fator*fatorAtualizacao;
        for(int i=0;i<tamanho;i++){
            peso[i]+= f*distancia[i];
        }
        euclidiana = euclidiana * (1-f);
    }
    
    void setFatorAtualizacao(double fator){
        if(fatorAtualizacao<=0){
            throw new IllegalArgumentException("Fator atualizacao nao poder zer zero ou menor");
        }
        this.fatorAtualizacao=fator;
    }
    
    private InicializadorPesos inicializador;
    void setInicializadorPesos(InicializadorPesos inicializador){
        this.inicializador=inicializador;
    }
    
    void inicializarPesos(){
        this.inicializador.setPesos(peso);
        this.inicializador.inicializarPesos();        
    }
}
